<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>01回顾Object.defineProperty方法</title>
	</head>
	<body>
		<!--
		
		语法：
		Object.defineProperty(obj,prop,descriptor)
		参数解读：
			obj——表示要在其定义属性的对象
			prop——接收String、Symbol类型，表示要定义的属性名称
			descriptor——（很重要的属性）被定义或者修改的属性描述符，可以定义属性行为的元数据信息。大白话                    来讲就是说：通过它来限制属性的读写行为。         
		返回值：
		    返回一个Object。返回被传递给函数的对象obj
		
		 知识点：
		 1.在使用了get,set任何一个配置时不允许再出现value,writable任何一个，否则将会报错，因为两者的功能是一样的，不允许重复声明。
		 -->
		<script>
			let number = 19;
			let person = {
				name: 'daxing',
				sex: '男'
			}
			Object.defineProperty(person, 'age', {
				//value: 18,
				enumerable: true, // 控制属性是否可枚举，默认值为false
				//writable: true, // 控制属性是否可以被修改，默认值为false
				configurable: true, //控制属性是否可以被删除，默认值为false

				// 当有人读取person的age属性时，get函数(getter)就会被调用，且返回值就是age的值
				get() {
					console.log("有人读取了age属性");
					return number;
				},

				// 当有人修改person的age属性时，set函数(setter)就会被调用，且会收到修改的具体值
				set(value) {
					console.log("有人设置了age属性,且值为", value);
					number = value;
				}
			});
			console.log(person);
			console.log(Object.keys(person));
		</script>
	</body>
</html>